home *** CD-ROM | disk | FTP | other *** search
- // GenericSerial.c
- // Used on Mac & Palm platforms, for both the server/client apps
-
- #include "GenericSerial.h"
-
- #include <PalmOS.h>
-
- #ifndef NULL
- #define NULL (0L)
- #endif
-
- //static MyPacket gInPacket;
-
- //static char gInBuf[kMaxExtraDataSize];
- //static char gOutBuf[sizeof(MyPacket) + kMaxExtraDataSize];
-
-
- static void Reply(long p1, long p2, long p3, long p4, short dataSize, short result);
-
- static void Send(short op, long p1, long p2, long p3, long p4, short dataSize, char* bufP);
- static void Receive(short confirmOp, long *p1, long *p2, long *p3, long *p4, short *resultP, char *bufP);
-
-
- void Send(short op, long p1, long p2, long p3, long p4, short dataSize, char* bufP)
- {
- MyPacket outPacket;
- short err;
-
- // initialize outPacket:
- outPacket.cookie = kCookieValue;
- outPacket.op = op;
- outPacket.dataSize = dataSize;
- outPacket.result = 0;
- outPacket.reserved = 0;
- outPacket.param1 = p1;
- outPacket.param2 = p2;
- outPacket.param3 = p3;
- outPacket.param4 = p4;
-
- err = SerialWrite(sizeof(MyPacket), (char*)&outPacket);
-
- if(err == 0 && dataSize > 0)
- {
- ErrFatalDisplayIf(bufP == 0, "no buffer");
-
- // send extra data, if any:
- err = SerialWrite(dataSize, bufP);
- }
-
- return;
- }
-
-
- void Receive(short confirmOp, long *p1, long *p2, long *p3, long *p4, short *resultP, char *bufP)
- {
- MyPacket inPacket;
- short err = SerialRead(sizeof(MyPacket), (char*)&inPacket);
- if(err != 0) return; // (0 = noErr = errNone :-)
-
- ErrFatalDisplayIf(inPacket.op != confirmOp, "bad reply");
-
- // check the cookie so we know we're interpreting the data correctly
- if(inPacket.cookie != kCookieValue) return;
- if(inPacket.dataSize > kMaxExtraDataSize) return;
-
- if(p1) *p1 = inPacket.param1;
- if(p2) *p2 = inPacket.param2;
- if(p3) *p3 = inPacket.param3;
- if(p4) *p4 = inPacket.param4;
- if(resultP) *resultP = inPacket.result;
-
- if(inPacket.dataSize > 0)
- {
- ErrFatalDisplayIf(bufP == 0, "no buffer");
-
- if(inPacket.dataSize > kMaxExtraDataSize) return;
-
- err = SerialRead(inPacket.dataSize, bufP);
- if(err != 0) return; // (0 = noErr = errNone :-)
- }
-
- }
-
- short RemoteFileRead(long filep, long numBytes, long *numBytesRead, char *bufP, char dataStoreBased, long offset)
- {
- short result = -1;
- long tempRead;
- char *dataBufP;
-
- result = 0; // (0 == noErr == errNone)
- if(numBytesRead) *numBytesRead = 0;
-
- if(dataStoreBased)
- {
- dataBufP = bufP;
- bufP = MemPtrNew(kMaxExtraDataSize);
- ErrFatalDisplayIf(bufP == 0, "no mem");
- }
-
- while(numBytes > 0 && result == 0)
- {
- tempRead = numBytes;
- if(tempRead > kMaxExtraDataSize) tempRead = kMaxExtraDataSize;
-
- // Send request & receive reply:
- Send(kFileRead, filep, tempRead, 0, 0, 0, NULL);
- Receive(kFileRead, &tempRead, NULL, NULL, NULL, &result, bufP);
-
- // we got tempRead bytes...
- numBytes -= tempRead;
- if(numBytesRead) *numBytesRead += tempRead;
-
- if(dataStoreBased)
- {
- DmWrite(dataBufP, offset, bufP, tempRead);
- offset += tempRead;
- }
- else
- {
- bufP += tempRead;
- }
- }
-
- if(dataStoreBased)
- {
- MemPtrFree(bufP);
- }
-
-
- return result;
- }
-
-
- short RemoteFileWrite(long filep, long numBytes, long *numWritten, char *bufP)
- {
- short result = -1;
- long tempWrit;
-
- result = 0; // (0 == noErr == errNone)
- if(numWritten) *numWritten = 0;
-
- while(numBytes > 0 && result == 0)
- {
- tempWrit = numBytes;
- if(tempWrit > kMaxExtraDataSize) tempWrit = kMaxExtraDataSize;
-
- // Send request & receive reply:
- Send(kFileWrite, filep, tempWrit, 0, 0, tempWrit, bufP);
- Receive(kFileWrite, &tempWrit, NULL, NULL, NULL, &result, NULL);
-
- // we write tempWrit bytes...
- bufP += tempWrit;
- numBytes -= tempWrit;
- if(numWritten) *numWritten += tempWrit;
-
- }
-
- return result;
- }
-
-
- short RemoteDirIterate(long dirP, long *iteratorP, char *buf, long *size, long *attrP)
- {
- short result = -1;
-
- Send(kDirEnumerate, dirP, *iteratorP, 0, 0, 0, NULL);
- Receive(kDirEnumerate, iteratorP, attrP, 0, 0, &result, buf);
- if(size) *size = StrLen(buf);
-
- return result;
- }
-
- short RemoteFileCreate(char *path)
- {
- short result = -1;
-
- Send(kFileCreate, 0, 0, 0, 0, StrLen(path)+1, path);
- Receive(kFileCreate, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
- short RemoteDirCreate(char *path)
- {
- short result = -1;
-
- Send(kDirCreate, 0, 0, 0, 0, StrLen(path)+1, path);
- Receive(kDirCreate, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
- short RemoteFileDelete(char *path)
- {
- short result = -1;
-
- Send(kFileDelete, 0, 0, 0, 0, StrLen(path)+1, path);
- Receive(kFileDelete, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
- short RemoteFileOpen(char *path, long perm, long *filePP)
- {
- short result = -1;
-
- Send(kFileOpen, perm, 0, 0, 0, StrLen(path)+1, path);
- Receive(kFileOpen, filePP, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
- short RemoteFileClose(long filep)
- {
- short result = -1;
-
- Send(kFileClose, filep, 0, 0, 0, 0, NULL);
- Receive(kFileClose, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
- short RemoteFileSeek(long filep, short origin, unsigned short offset)
- {
- short result = -1;
-
- Send(kFileSeek, filep, origin, offset, 0, 0, NULL);
- Receive(kFileSeek, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
-
- short RemoteFileSize(long filep, long *size)
- {
- short result = -1;
-
- Send(kFileSize, filep, 0, 0, 0, 0, NULL);
- Receive(kFileSize, size, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
- short RemoteFileResize(long filep, long newsize)
- {
- short result = -1;
-
- Send(kFileResize, filep, newsize, 0, 0, 0, NULL);
- Receive(kFileResize, 0, 0, 0, 0, &result, NULL);
-
- return result;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-